//#define  _CRT_SECURE_NO_WARNINGS
//#include <vector>
//#include <iostream>
//#include <climits>
//#include <algorithm>
//using namespace std;
//
//vector<int> arr;
//int n, aim;
//int ret = INT_MAX;
//void dfs(int pos, int sum, int tmp)
//{
//	for (int i = 0; i < n; i++)
//	{
//		if (sum < aim)
//		{
//			//sum += arr[pos];
//			//tmp++;
//			dfs(pos, sum + arr[pos], ++tmp);
//		}
//		else if (sum == aim)
//		{
//			ret = min(ret, tmp);
//			return;
//		}
//	}
//}
//
//
//void dfs(int pos, int sum, int tmp)
//{
//    if (sum == aim)
//    {
//        ret = min(ret, tmp);
//        return;
//    }
//    if (sum > aim || pos == arr.size()) return;
//    for (int i = 0; i * arr[pos] + sum <= aim; i++)
//    {
//        if (i) sum += arr[pos];
//        dfs(pos + 1, i * arr[pos] + sum, tmp);
//    }
//    for (int i = 1; i * arr[pos] + sum <= aim; i++) sum -= arr[pos];
//}
//
//vector<int> path;
//void dfs(int pos, int sum)
//{
//    if (sum == aim)
//    {
//        ret = min(ret, (int)path.size());
//        return;
//    }
//    if (sum > aim || pos == arr.size()) return;
//    for (int i = 0; i * arr[pos] + sum <= aim; i++)
//    {
//        if (i) path.push_back(arr[pos]);
//        dfs(pos + 1, i * arr[pos] + sum);
//    }
//    for (int i = 1; i * arr[pos] + sum <= aim; i++) path.pop_back();
//}
//int main()
//{
//    cin >> n >> aim;
//    arr.resize(n);
//    for (int i = 0; i < n; i++) cin >> arr[i];
//    dfs(0, 0);
//    if (ret == INT_MAX)
//        cout << -1 << endl;
//    else
//        cout << ret << endl;
//}
//
//
